package com.designPattern.p04AbstractFactory;

/**
 *  抽象工厂总结
 * @author: luhd
 * @create: 2021-09-05
 */
public class Summary {
    /**
     *    理解产品族和产品等级
     * 产品族：一个品牌下面的所有产品；例如华为下面的手机，路由器，电脑 称为华为的产品族；
     * 产品等级：多个品牌下面的同种产品；例如华为和小米下面的手 称为一个产品等级；
     */


    /*
            1.首先定义产品接口（如 手机产品接口和路由器产品接口）
            2.具体的产品：小米手机实现类  华为手机实现类
                        小米路由器实现了类  华为路由器实现类
            3.工厂接口类：生产手机    生产路由器
            4.华为和小米工厂实现类 --> 继承工厂接口
            5.客户端：
                      // 创建小米工厂
                      IProductFactory xiaomiFactory = new XiaomiFactory();
                      // 生产小米手机
                      IPhoneProduct xiaomiPhone = xiaomiFactory.phoneProduct();
                      xiaomiPhone.start();
	                  xiaomiPhone.sendSMS();
	                  //生产小米路由器
	                  IRouterProduct xiaomiRouter = xiaomiFactory.routerProduct();
	                  xiaomiRouter.openwifi();
	                  xiaomiRouter.setting();
     */

    /**
     * 优点：一个产品族中的多个对象被设计成一起工作时，它能保证客户端始终只使用同一个产品族中的对象（将一个系列的产品统一一起创建）；
     *
     * 缺点：
     * 产品族扩展非常困难，要增加一个系列的某一产品，既要修改工厂抽象类里加代码，又修改具体的实现类里面加代码；
     * 增加了系统的抽象性和理解难度；
     */
}
